iT邦幫忙

2026 iThome 鐵人賽

DAY 8
0
Vibe Coding

重新認識Github Copilot (續)系列 第 8

Day08 - Copilot 幫你寫 Python 單元測試?實測 /setupTests、/tests、/fix 鬼打牆 😅

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20260921/20103333cOoBP90EcT.png
今天要來介紹一個很多工程師都會有感的痛點:不是不想寫單元測試,是常常忙到最後只剩下「之後再補」,然後那個「之後」就跟減肥一樣,永遠是明天開始啊~/images/emoticon/emoticon20.gif

筆者這次實測的是 GitHub Copilot 在 VS Code 裡,怎麼用 /setupTests、/tests、還有 /fix 來修復 Python 單元測試結果。原本以為它可以一條龍幫我處理到漂漂亮亮,不過不同的Mode用 /tests 寫出的單元測試也不同,還要自己跳下去測過一輪啊,找出自己合用的/images/emoticon/emoticon12.gif

🧪 先把測試環境架起來:/setupTests 真的有省事
https://ithelp.ithome.com.tw/upload/images/20260921/201033339AmY4JMxQp.jpg

筆者一開始先示範 /setupTests。這個指令的概念很簡單,就是丟下去之後,Copilot 會嘗試辨識你的專案語言、推測適合的測試框架,然後幫你建立基本測試環境。因為筆者 demo 的 source code 是微軟提供的 Python 範例,所以它有偵測到這是 Python 專案,接著去找 Python 可用的 test framework。這時候它會給選項,讓你挑 pytest 或 unittest 之類的路線。

https://ithelp.ithome.com.tw/upload/images/20260921/20103333b5YBdoge99.jpg

同樣的 slash command,不同模型跑出來的結果會不一樣。有時候它會給兩個選項,有時候只給一個,像筆者切換模型後,它就直接覺得 pytest 最優,不囉嗦,直接單押 pytest 給我看~
https://ithelp.ithome.com.tw/upload/images/20260921/20103333BuWkDYHvk4.jpg

這件事其實很重要,因為很多人會以為 command 是固定規則、固定輸出,但實際上不是。同一句話、不同模型、不同結果,另外原本以為便宜模型只是慢一點,結果有時候不是慢,是直接把你帶去別條路。對熟的東西拿來省錢可以,對不熟的東西,筆者建議還是使用貴的模型阿~ 而且有時候看似便宜,結果跑超久、修超多次,最後總成本也未必比較省。

接著它幫筆者產出基本測試檔案後,筆者直接跑Hello World測試。結果第一個坑馬上出現:VS Code 找不到測試檔案。
https://ithelp.ithome.com.tw/upload/images/20260921/201033339bixlMGfPw.jpg

⚙️ 第一個坑:VS Code 預設沒抓到 Python 執行環境
這裡超容易卡關,尤其是第一次玩的人。筆者實際踩到的狀況是,VS Code 的測試功能是預設是 C# ,結果現在筆者是在跑 Python 測試,它卻沒用到正確的 Python interpreter。解法不難,就是去選正確的 Python 執行環境。筆者這邊選的是 Python 3.13.7,切好之後再跑一次,測試就正常出現了。

https://ithelp.ithome.com.tw/upload/images/20260921/20103333ArbYeE74iF.jpg

📝 /tests 怎麼用
環境好了之後,筆者就開始針對單一檔案請 Copilot 寫單元測試。這邊用法也不難,直接對目標檔案下 /tests 就好,現在不會直接幫你生檔,要自己 Keep / 存檔如下圖。

https://ithelp.ithome.com.tw/upload/images/20260921/20103333bnSGyF8YX1.jpg

接著筆者跑這支新生成的測試,果然,AI 不會讓你太無聊,它寫出來的測試出錯了 😆

https://ithelp.ithome.com.tw/upload/images/20260921/20103333bItL2MK3Wj.jpg

🐛 /fix 實測:不是不能用,但沒有想像中那麼神
錯誤一出來,筆者先點開 test message 看它到底炸在哪。這次是很典型的參數問題:它少了 book_id 相關參數,把錯誤訊息跟測試內容一起當上下文,試著用 /fix 去修。老實說,當下看起來它像有修對,右側也產出一坨看起來很合理的修改,心裡還想說「喔喔喔,這次有喔」🙂

結果呢?再跑一次,還是錯。/images/emoticon/emoticon06.gif

所以這段實測下來,/fix 並不是那麼好用。

✅ 筆者推薦招式
遇到測試失敗時,直接把錯誤訊息 + 目標檔案 + 測試檔案 一起丟給模型,直接打 fix it。尤其是模型夠強的時候,這招幾乎是萬用。

https://ithelp.ithome.com.tw/upload/images/20260921/20103333EgkyCiZ7rA.jpg

更多實作請參考完整版影片

📌 今日結論

💸 不熟的領域別硬省模型費用。便宜模型有時候不是省,是慢慢陪你繞遠路。

🛠 實務上應用: /tests 能加速起手式,/fix 不一定萬用;用"fix it" + 貴的模型或許更省事。


上一篇
Day07 - 實測 /explain 與 #codebase 的幾個重點
系列文
重新認識Github Copilot (續)8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言